// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT
// IT'S ALL JUST JUNK FOR OUR DOCS!
// ++++++++++++++++++++++++++++++++++++++++++

!function($) {

    $(function() {

        // Disable certain links in docs
        $('section [href^=#]').click(function(e) {
            e.preventDefault()
        })

        // make code pretty
        window.prettyPrint && prettyPrint()

        // add-ons
        $('.add-on :checkbox').on('click', function() {
            var $this = $(this)
                    , method = $this.attr('checked') ? 'addClass' : 'removeClass'
            $(this).parents('.add-on')[method]('active')
        })

        // position static twipsies for components page
        if ($(".twipsies a").length) {
            $(window).on('load resize', function() {
                $(".twipsies a").each(function() {
                    $(this)
                            .tooltip({
                                placement: $(this).attr('title')
                                , trigger: 'manual'
                            })
                            .tooltip('show')
                })
            })
        }

        // add tipsies to grid for scaffolding
        if ($('#grid-system').length) {
            $('#grid-system').tooltip({
                selector: '.show-grid > div'
                , title: function() {
                    return $(this).width() + 'px'
                }
            })
        }

        // fix sub nav on scroll
        var $win = $(window)
                , $nav = $('.subnav')
                , navTop = $('.subnav').length && $('.subnav').offset().top - 40
                , isFixed = 0

        processScroll()

        // hack sad times - holdover until rewrite for 2.1
        $nav.on('click', function() {
            if (!isFixed)
                setTimeout(function() {
                    $win.scrollTop($win.scrollTop() - 47)
                }, 10)
        })

        $win.on('scroll', processScroll)

        function processScroll() {
            var i, scrollTop = $win.scrollTop()
            if (scrollTop >= navTop && !isFixed) {
                isFixed = 1
                $nav.addClass('subnav-fixed')
            } else if (scrollTop <= navTop && isFixed) {
                isFixed = 0
                $nav.removeClass('subnav-fixed')
            }
        }

        // tooltip demo
        $('.tooltip-demo.well').tooltip({
            selector: "a[rel=tooltip]"
        })

        $('.tooltip-test').tooltip()
        $('.popover-test').popover()

        // popover demo
        $("a[rel=popover]")
                .popover()
                .click(function(e) {
                    e.preventDefault()
                })

        // button state demo
        $('#fat-btn')
                .click(function() {
                    var btn = $(this)
                    btn.button('loading')
                    setTimeout(function() {
                        btn.button('reset')
                    }, 3000)
                })

        // carousel demo
        $('#myCarousel').carousel()

        // javascript build logic
        var inputsComponent = $("#components.download input")
                , inputsPlugin = $("#plugins.download input")
                , inputsVariables = $("#variables.download input")

        // toggle all plugin checkboxes
        $('#components.download .toggle-all').on('click', function(e) {
            e.preventDefault()
            inputsComponent.attr('checked', !inputsComponent.is(':checked'))
        })

        $('#plugins.download .toggle-all').on('click', function(e) {
            e.preventDefault()
            inputsPlugin.attr('checked', !inputsPlugin.is(':checked'))
        })

        $('#variables.download .toggle-all').on('click', function(e) {
            e.preventDefault()
            inputsVariables.val('')
        })

        // request built javascript
        $('.download-btn').on('click', function() {

            var css = $("#components.download input:checked")
                    .map(function() {
                        return this.value
                    })
                    .toArray()
                    , js = $("#plugins.download input:checked")
                    .map(function() {
                        return this.value
                    })
                    .toArray()
                    , vars = {}
            , img = ['glyphicons-halflings.png', 'glyphicons-halflings-white.png']

            $("#variables.download input")
                    .each(function() {
                        $(this).val() && (vars[ $(this).prev().text() ] = $(this).val())
                    })

            $.ajax({
                type: 'POST'
                , url: /\?dev/.test(window.location) ? 'http://localhost:3000' : 'http://bootstrap.herokuapp.com'
                , dataType: 'jsonpi'
                , params: {
                    js: js
                    , css: css
                    , vars: vars
                    , img: img
                }
            })
        })
    })

// Modified from the original jsonpi https://github.com/benvinegar/jquery-jsonpi
    $.ajaxTransport('jsonpi', function(opts, originalOptions, jqXHR) {
        var url = opts.url;

        return {
            send: function(_, completeCallback) {
                var name = 'jQuery_iframe_' + jQuery.now()
                        , iframe, form

                iframe = $('<iframe>')
                        .attr('name', name)
                        .appendTo('head')

                form = $('<form>')
                        .attr('method', opts.type) // GET or POST
                        .attr('action', url)
                        .attr('target', name)

                $.each(opts.params, function(k, v) {

                    $('<input>')
                            .attr('type', 'hidden')
                            .attr('name', k)
                            .attr('value', typeof v == 'string' ? v : JSON.stringify(v))
                            .appendTo(form)
                })

                form.appendTo('body').submit()
            }
        }
    })

}(window.jQuery)